package com.example.demo.pojo;

import com.example.demo.enums.ErrorCode;
import lombok.Data;

@Data
public class R<T> implements java.io.Serializable {
    private Integer code;
    private String message;
    private T data;

    protected R(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    //定义好的异常返回
    public static <T> R<T> success() {
        return new R(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), null);
    }


    //可以自定义返回信息的异常返回
    public static <T> R<T> success(T data) {
        return new R(ErrorCode.SUCCESS.getCode(), "success", data);
    }

    public static <T> R<T> success(String message) {
        return new R(ErrorCode.SUCCESS.getCode(), message, null);
    }

    //定义好的异常返回
    public static <T> R<T> failed() {
        return new R(ErrorCode.FAILED.getCode(), ErrorCode.FAILED.getMsg(), null);
    }

    //可以自定义返回信息的异常返回
    public static <T> R<T> failed(String message) {
        return new R(ErrorCode.FAILED.getCode(), message, null);
    }

    public static <T> R<T> failed(T data) {
        return new R(ErrorCode.FAILED.getCode(), "failed", null);
    }


    //定义好的异常返回
    public static <T> R<T> unauthorized() {
        return new R(ErrorCode.UNAUTHORIZED.getCode(), ErrorCode.UNAUTHORIZED.getMsg(), null);
    }

    //可以自定义返回信息的异常返回
    public static <T> R<T> unauthorized(String message) {
        return new R(ErrorCode.UNAUTHORIZED.getCode(), message, null);
    }

    //定义好的异常返回
    public static <T> R<T> forbidden() {
        return new R(ErrorCode.FORBIDDEN.getCode(), ErrorCode.FORBIDDEN.getMsg(), null);
    }

    //可以自定义返回信息的异常返回
    public static <T> R<T> forbidden(String massage) {
        return new R(ErrorCode.FORBIDDEN.getCode(), massage, null);
    }

    //定义好的异常返回
    public static <T> R<T> ACCOUNT() {
        return new R(ErrorCode.ACCOUNT_PWD_NOT_EXIST.getCode(), ErrorCode.ACCOUNT_PWD_NOT_EXIST.getMsg(), null);
    }

    //可以自定义返回信息的异常返回
    public static <T> R<T> ACCOUNT(String massage) {
        return new R(ErrorCode.ACCOUNT_PWD_NOT_EXIST.getCode(), massage, null);
    }

    //定义好的异常返回
    public static <T> R<T> PARAMS() {
        return new R(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMsg(), null);
    }

    //可以自定义返回信息的异常返回
    public static <T> R<T> PARAMS(String massage) {
        return new R(ErrorCode.PARAMS_ERROR.getCode(), massage, null);
    }

    public static <T> R<T> success(String message, T data) {
        return new R<T>(ErrorCode.SUCCESS.getCode(), message, data);
    }

    public boolean getSuccess() {
        return false;
    }
}
